package com.gitee.huanminabc.jlambda_sql.warapper;

import com.gitee.huanminabc.jlambda_sql.SqlWrapper;
import com.gitee.huanminabc.jlambda_sql.base.SqlFun;

/**
 * 简要描述
 *
 * @Author: huanmin
 * @Date: 2025/4/6 12:11
 * @Version: 1.0
 * @Description: 文件作用详细描述....
 */
public interface WhereWrapper<Wrapper extends SqlWrapper, T> {

    Wrapper IS_NULL(SqlFun<T, ?> column);

    Wrapper IS_NULL(boolean condition, SqlFun<T, ?> column);


    Wrapper IS_NOT_NULL(SqlFun<T, ?> column);

    Wrapper IS_NOT_NULL(boolean condition, SqlFun<T, ?> column);


    Wrapper EQ(SqlFun<T, ?> column, Object value);

    Wrapper EQ(boolean condition, SqlFun<T, ?> column, Object value);


    //between
    Wrapper BETWEEN(SqlFun<T, ?> column, Object value1, Object value2);

    Wrapper BETWEEN(boolean condition, SqlFun<T, ?> column, Object value1, Object value2);

    //like
    Wrapper LIKE(SqlFun<T, ?> column, Object value);

    Wrapper LIKE(boolean condition, SqlFun<T, ?> column, Object value);

    //likeLeft
    Wrapper LIKE_LEFT(SqlFun<T, ?> column, Object value);

    Wrapper LIKE_LEFT(boolean condition, SqlFun<T, ?> column, Object value);

    //likeRight
    Wrapper LIKE_RIGHT(SqlFun<T, ?> column, Object value);

    Wrapper LIKE_RIGHT(boolean condition, SqlFun<T, ?> column, Object value);

    //in
    Wrapper IN(SqlFun<T, ?> column, Object... values);

    Wrapper IN(boolean condition, SqlFun<T, ?> column, Object... values);

    //not in
    Wrapper NOT_IN(SqlFun<T, ?> column, Object... values);


    Wrapper NOT_IN(boolean condition, SqlFun<T, ?> column, Object... values);


    //ne
    Wrapper NE(SqlFun<T, ?> column, Object value);

    Wrapper NE(boolean condition, SqlFun<T, ?> column, Object value);

    //gt
    Wrapper GT(SqlFun<T, ?> column, Object value);

    Wrapper GT(boolean condition, SqlFun<T, ?> column, Object value);

    //ge
    Wrapper GE(SqlFun<T, ?> column, Object value);

    Wrapper GE(boolean condition, SqlFun<T, ?> column, Object value);

    //lt
    Wrapper LT(SqlFun<T, ?> column, Object value);

    Wrapper LT(boolean condition, SqlFun<T, ?> column, Object value);

    //le
    Wrapper LE(SqlFun<T, ?> column, Object value);

    Wrapper LE(boolean condition, SqlFun<T, ?> column, Object value);
}
